// 导入请求模块
import http from 'wx-https'

// 网络请求-配置基地址及响应拦截器
// https://live-api.itheima.net/announcement 把文档请求地址的基地址截过来
// 配置基地址
http.baseURL = "https://live-api.itheima.net"

// const obj = {
//   a: 1,
//   b: 2
// }
// const newObj = Object.assign({}, obj, {
//   c: 3,
//   d: 4,
//   e: 5
// })
// const newObj2 = Object.assign(obj, {
//   c: 3,
//   d: 4,
//   e: 5
// })
// === 比较的值（地址）和类型
// console.log(obj === newObj); // false
// console.log(obj === newObj2); // true
// const o1 = {}
// const o2 = {}
// console.log(o1 === o2); // false

// 响应拦截器配置，他的写法，一般是看官方网站
// 响应拦截器配置
// http.intercept.response = (res) => {
http.intercept.response = async ({
  data,
  statusCode,
  config
}) => {
  // console.log('请求的url：', config.url);
  if (statusCode === 401) {
    // console.log(11, config);
    // 在这个if分支里面 token就是过期， 刷新token， refreshToken也可能过期，会执行到这个401的分支里面来
    // if(如果下面的情况是refreshToken过期了，就要在这个if分支里面，给他强行跳转回首页) {}
    // 如果是刷新请求接口产生的401，说明refreshToken也过期了，这时应该跳登录页让用户重新登录
    if (config.url.includes('refreshToken')) {
      // 跳转回首页，不要执行下面的代码了
      // 进入了这个if语句，就表示是refreshToken这个值也失效了，我们就不能再无感刷新了
      // 需要告诉用户，去首页重新使用账号和密码登录或手机号验证码
      const pages = getCurrentPages();
      const currentPage = pages[pages.length - 1]
      // wx.redirectTo({
      return wx.redirectTo({
        //   url: '/pages/login/index',
        url: `/pages/login/index?redirectUrl=/${currentPage.route}`,
      })
    }

    // 就需要使用 刷新token 去发请求，获取新的token
    const res = await http({
      url: wx.$http.baseURL + '/refreshToken',
      method: 'POST',
      header: {
        Authorization: getApp().refreshToken
      }
    })
    // console.log(res);
    getApp().setToken(res.data.token, res.data.refreshToken)

    // 如果获取了新的token值以后，应该吧之前的token失效的请求在发一遍
    http(Object.assign(config, {
      header: {
        Authorization: getApp().token
      }
    }))
  }


  // console.log(res)
  // console.log(111);
  // 如果下面这句话不写，那么在前面发请求的地方，得到的值就是 undeifned
  // return res.data // 脱壳处理
  return data // 脱壳处理
}

// 请求拦截器配置
http.intercept.request = (config) => {
  // console.log(config);
  // config.header = {
  const defaultConfig = {
    Authorization: getApp().token
    // 其他同事添加自己的配置，就可以在这里加，不用去给 config 通用的对象添加
    // 在我写代码的时候，有时会考虑一些代码的扩展性，为后面项目的迭代升级做准备
  }
  // 合并用户传递的header及默认header
  config.header = Object.assign({}, defaultConfig, config.header)
  return config
}

// 给这个全局 wx添加一个属性
// 挂载到全局空间wx上
// 前面最好加号$，用以和原生的api做区分
wx.$http = http

// 做一个默认导出的功能  导出模块
export default http